//**************************************************************************************************************
// CLASS: Integer
//
// DESCRIPTION
// Declares a class that represents Integer operands in assembly language instructions. This class is derived
// from Operand.
//
// AUTHOR INFORMATION
// Group 2
// Tyler Williams
// Lauren Walker
// Cameron Stewart
// Fatimah Alowah
//**************************************************************************************************************
// Preprocessor guard.
#ifndef INTEGER_HPP
#define INTEGER_HPP

#include "Operand.hpp"

//==============================================================================================================
// CLASS: Integer (derived from Operand)
//==============================================================================================================

class Integer : public Operand {
public:
    //==========================================================================================================
    // PUBLIC FUNCTION MEMBERS:
    //==========================================================================================================
    
    //---------------------------------------------------------------------------------------------------------
    // Default ctor.
    //---------------------------------------------------------------------------------------------------------
    Integer
    (
     std::string const& pValue=""
     );
    
    //---------------------------------------------------------------------------------------------------------
    // Copy ctor.
    //---------------------------------------------------------------------------------------------------------
    Integer
    (
     Integer const& pInteger
     );
    
    //---------------------------------------------------------------------------------------------------------
    // Dtor.
    //---------------------------------------------------------------------------------------------------------
    ~Integer
    (
    );
    
    //---------------------------------------------------------------------------------------------------------
    // GetValue()
    //---------------------------------------------------------------------------------------------------------
    int32 GetValue
    (
    )
    const;
    
    //---------------------------------------------------------------------------------------------------------
    // operator=()
    //---------------------------------------------------------------------------------------------------------
    Integer& operator=
    (
     Integer const& pInteger
     );
    
    //---------------------------------------------------------------------------------------------------------
    // SetValue()
    //---------------------------------------------------------------------------------------------------------
    void SetValue
    (
     int32 const pValue
     );
    
protected:
    //==========================================================================================================
    // PROTECTED FUNCTION MEMBERS:
    //==========================================================================================================
    
    //---------------------------------------------------------------------------------------------------------
    // Copy()
    //---------------------------------------------------------------------------------------------------------
    void Copy
    (
     Integer const& pInteger
     );
    
private:
    //==========================================================================================================
    // PRIVATE DATA MEMBERS:
    //==========================================================================================================
    
    // A Label is a special type of Operand that has an address associated with the Label.
    int32 mInt;
};

#endif


